-
Notifications
You must be signed in to change notification settings - Fork 452
feat: add archive script support for worktrees #120
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
paul-bouzian
wants to merge
74
commits into
21st-dev:main
from
paul-bouzian:metropolitan-bandicoot-238fe2
Closed
feat: add archive script support for worktrees #120
paul-bouzian
wants to merge
74
commits into
21st-dev:main
from
paul-bouzian:metropolitan-bandicoot-238fe2
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Open source release of 1Code - Best UI for Claude Code with Local and Remote agent execution. Apache License 2.0
## What's New in v0.0.11 ### Changes - Renamed app from Agents to 1Code - Fixed appId to dev.21st.agents for auto-update compatibility - Prevent todo list flickering and improve streaming UX - Handle stale lock files from crashed instances - Show Open PR button when no uncommitted changes - Improved auto-update UX
## What's New in v0.0.12
### Features
- Drafts section in sidebar with preview and delete functionality
- Interrupted state for tools - shows "{toolName} interrupted" when stopping agent with ESC
- Tooltip with full file path when hovering over truncated filenames
- "See what's new" banner after app updates with link to changelog
### Improvements & Fixes
- Fixed sub-chat renaming not persisting to database
- Fixed editor focus after drag & drop image insertion
- Pending questions now bound to specific sub-chat (no longer appear in wrong chat)
- Fixed duplicate text in todo tool when status is in_progress
- Renamed "Premium support" button to "Feedback"
- Performance optimizations for pending questions
## What's New in v0.0.16 ### Improvements & Fixes - Fixed authentication redirect URL for packaged app - Fixed sidebar workspace timestamps updating on message send - Exclude session/plan files from changed files status bar - Reduced stop button icon size in send button
Adds ability to clone repos directly from GitHub by entering a URL or owner/repo format.
Repos are stored in userData/repos/{owner}/{repo}.
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Stores cloned repos alongside worktrees for consistency. Co-Authored-By: Claude Opus 4.5 <[email protected]>
Shows "Clone from GitHub" button alongside "Select folder" during first-time setup. Co-Authored-By: Claude Opus 4.5 <[email protected]>
## What's New in v0.0.18 ### Improvements & Fixes - Fixed sidebar flickering when switching between chats
## What's New ### Features - Added Cmd+Enter shortcut for "Implement plan" button - Improved archive popover: auto-unarchive on selection, input clears on revisit ### Fixes - Fixed sidebar flickering when switching between chats
## What's New ### Features - Added Cmd+Enter shortcut for "Implement plan" button - Improved archive popover: auto-unarchive on selection, input clears on revisit
## What's New ### Fixes - Fixed z-index layering for sticky user message bubble - Removed MCP servers indicator from header
Prevent message submission during IME composition (Chinese/Japanese/Korean input). Users can now use Enter to confirm IME candidate selection without triggering message send. Added isComposing check to both AgentsMentionsEditor and PromptInputTextarea components. Changes: - agents-mentions-editor.tsx: Add !e.nativeEvent.isComposing check - prompt-input.tsx: Add !e.nativeEvent.isComposing check
## What's New ### Fixes - Fixed scroll behavior: users can now scroll up freely during streaming - Fixed input lag by deferring trigger detection to next frame
Add animated GIF demos for key features: - Worktree isolation and background agent execution - Cursor-like UI with diff previews and git client - Plan mode with clarifying questions and structured plans Co-Authored-By: Claude Opus 4.5 <[email protected]>
Fix IME composition issue with Enter key
Add animated GIF demos for key features: - Worktree isolation and background agent execution - Cursor-like UI with diff previews and git client - Plan mode with clarifying questions and structured plans Co-Authored-By: Claude Opus 4.5 <[email protected]>
Move GIF assets to root assets/ directory and update paths in README. Co-Authored-By: Claude Opus 4.5 <[email protected]>
## What's New ### Fixes - Fixed scroll behavior: users can now scroll up freely during streaming - Fixed input lag by deferring trigger detection to next frame - Fixed tool display state during streaming
## What's New ### Features - Added scroll-to-bottom button with Cmd+↓ hotkey - Archive now kills terminal processes and deletes worktree ### Fixes - Fixed excessive re-renders in sidebar during scroll - Restored copy and play buttons for AI messages - ESC now skips AskQuestion instead of stopping stream - Show full command in collapsed tool view - Fixed tool display state during streaming
Update download URL to include binary name
fix: Add author email in package.json for .deb package generation
Add clone from GitHub feature
Two issues fixed:
1. MCP Warmup "spawn node ENOENT" error
- warmupMcpCache() was missing pathToClaudeCodeExecutable option
- SDK fell back to spawning via 'node' which isn't in PATH when
launched from GUI
- Now uses getBundledClaudeBinaryPath() like the chat function
2. Session expired crash handling
- When resuming a session that no longer exists in Claude CLI storage,
the process would crash with "No conversation found with session ID"
- Now detects this error, clears the invalid sessionId from database,
and shows user-friendly "Session expired" message
- User can simply send their message again to start fresh
## What's New ### Features - **Simplified Plan Mode** — New compact plan card and improved sidebar display - **Always Expand To-Do List** — New option to keep to-do list expanded (Settings → Preferences) - **Unified Analytics** — Improved PostHog tracking for desktop and web ### Improvements & Fixes - Fixed Claude SDK spawn errors and handle expired sessions — thanks @nicholasoxford! - Fixed Windows compatibility for git worktree operations — thanks @nicholasoxford! - Only show traffic light spacer on macOS — thanks @nicholasoxford! - Improved plan collapsing and removed redundant "Build plan" button - Skip Ollama checks when offline mode is disabled - GitHub avatar loading placeholder in settings - Fixed custom headers in MCP auth
## What's New ### Features - **Simplified Plan Mode** — Plan now shows as a compact card with option to view full plan in sidebar - **Always Expand To-Do List** — New option to keep to-do list expanded (Settings → Preferences) ### Improvements & Fixes - Fixed Claude SDK spawn errors and handle expired sessions — thanks @nicholasoxford! - Fixed Windows compatibility for git worktree operations — thanks @nicholasoxford! - Only show traffic light spacer on macOS — thanks @nicholasoxford! - Improved plan collapsing and removed redundant "Build plan" button - Skip Ollama checks when offline mode is disabled - GitHub avatar loading placeholder in settings - Fixed custom headers in MCP auth
## What's New ### Features - **CLI Command Support** — Added CLI command support and existing API key detection - **Auto-Advance Setting** — New option to auto-advance through workspace archive navigation ### Improvements & Fixes - Improved Windows PATH resolution for packaged apps
…t-dev#64) * Enhance Git Branch Management and Worktree Creation - Added a new mutation to fetch remote branches with pruning support. - Updated worktree creation to allow specifying branch type (local or remote). - Modified chat router to accept branch type input for worktree creation. - Enhanced the New Chat Form to manage and display branch types, including fetching remote branches in the background. * Added selectedBranchType prop to NewChatForm for enhanced branch management functionality. * Refactor lastSelectedBranchesAtom to store branch type and update NewChatForm to handle branch type selection and restoration from storage. * Update NewChatForm to reset selectedBranchType based on selectedBranch changes * Implement custom storage for last selected branches with migration from old format - Added a custom storage solution for last selected branches that migrates data from an old string format to a new structured format. - The migration process ensures compatibility with previously stored branch data, allowing for seamless updates to the storage format. * Enhance branch selection logic in NewChatForm to prioritize local branches over remote ones. Updated the default branch selection to ensure local branches are preferred when both types exist, improving branch management functionality. * Update NewChatForm to use lastSelectedBranches for branch selection logic, ensuring fallback to "local" branch type if the default branch is not found. This change enhances the robustness of branch management in the chat form.
## What's New ### Features - Desktop notifications toggle in settings - easily enable/disable system notifications - Chat export via context menu - download or copy to clipboard in Markdown, JSON, or Plain Text formats (supports both full workspace and individual sub-chat export) ### Improvements & Fixes - Improved notification throttling with priority system --- Thanks to @cyxzdev for the original implementation of desktop notifications and chat export (21st-dev#47)
## What's New ### Improvements & Fixes - **Plan Mode UI** — Improved plan mode UI and sidebar refetch - **Auto-scroll Fix** — Allow user to disable auto-scroll during scroll animation - **Todo List Fix** — Fixed infinite loop in todo list useEffect
## What's New - Desktop app release v0.0.38 ## Downloads - **macOS ARM64 (Apple Silicon)**: Download the `-arm64.dmg` file - **macOS Intel**: Download the `.dmg` file (without arm64) Auto-updates are enabled. Existing users will be notified automatically.
## What's New ### Improvements & Fixes - **Notifications Fix** — Filter notifications by chatId to prevent spam - **Per-Workspace Sidebars** — Plan and terminal sidebars are now per-workspace - **Error Handling** — Improved Claude SDK error handling and categorization - **Thinking Tokens** — Reduced max thinking tokens to prevent exceeding limit - **Paste Handling** — Updated paste text handling improvements - **MCP Auth** — Authentication improvements for MCP
## What's New ### Features - **Details Sidebar** — New unified Details sidebar with configurable widgets
## What's New ### Features - **Large Text Paste** — Auto-convert large pasted text to file attachments ### Improvements & Fixes - **Details Sidebar** — Improved caching, Plan widget expand, and UI updates - **Plan Indicator** — Fixed pending plan indicator (use mode as source of truth) - **Tooltip Fix** — Hide tooltip when workspace/chat is archived
fix: insert slash commands without auto-sending When selecting a slash command from suggestions (via Tab, Enter, or click), the command is now inserted into the input field instead of being sent immediately. This allows users to add arguments after the command before sending. State-changing commands (/clear, /plan, /agent, /compact) still execute immediately as they don't require additional input.
…1st-dev#86) fix: custom slash commands fail silently with multi-line arguments The regex used to parse slash command arguments was missing the 's' (dotAll) flag, causing '.' to not match newline characters. When a custom command was invoked with multi-line arguments, the regex failed silently. Additionally, active-chat.tsx was entirely missing the slash command expansion logic that new-chat-form.tsx already had, so custom commands with arguments never worked in ongoing conversations. Fixes: - Add 's' flag to regex so '.' matches newlines in arguments - Add case-insensitive command name matching - Add missing slash command expansion in active-chat.tsx
## What's New ### Features - **Drag & Drop File Mentions** — Drag files to chat with hidden content support - **Custom Hotkeys in Tooltips** — Tooltips now show your custom keyboard shortcuts - **Sidebar Mutual Exclusion** — Sidebars auto-restore when switching between them ### Improvements & Fixes - **MCP OAuth Fix** — Fixed authentication for servers with client allowlists - **Relative Paths** — Show relative paths instead of absolute in UI - **Slash Commands** — Fixed multi-line arguments and auto-send behavior - **Cmd+R Disabled** — Prevent accidental page refresh - **Pasted Text Fix** — Sanitize pasted text preview to fix mention parsing
* feat: human-readable worktree folder names Replace cryptic base36 IDs with readable names for worktree directories: - Worktree folders now use adjective-landscape pattern (e.g., "golden-meadow") - Project folders now use the sanitized project name (e.g., "lumpos-saas") Before: ~/.21st/worktrees/mksuo7x8o4j231wz/mkt3o6tuipqprfwl/ After: ~/.21st/worktrees/lumpos-saas/golden-meadow/ Backward compatible: existing worktrees continue to work via dual-lookup strategy in resolveProjectPathFromWorktree(). Co-Authored-By: Claude Opus 4.5 <[email protected]> * fix: address PR review feedback - Add short projectId suffix to sanitized project names to prevent slug collisions (e.g., "My Project" and "my_project" now produce distinct folder names like "my-project-abc123" vs "my-project-def456") - Truncate sanitized project names to 50 chars to avoid filesystem path length limits - Add database index on chats.worktree_path for faster lookups in resolveProjectPathFromWorktree() - Document TOCTOU race condition as acceptable (180k combinations, git worktree add fails atomically on collision) Co-Authored-By: Claude Opus 4.5 <[email protected]> * fix: remove projectId suffix from project folder names Slug collisions (e.g., "My Project" and "my_project" → "my-project") are safe because resolveProjectPathFromWorktree() resolves via the full chats.worktreePath (unique per chat), not the project folder name alone. Keeps the 50-char truncation for filesystem safety. Co-Authored-By: Claude Opus 4.5 <[email protected]> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
## What's New ### Features - **Multi-Window Support** — Open chats in new windows via context menu - **VS Code Theme Import** — Import themes from VS Code, Cursor, and Windsurf - **Human-Readable Worktree Names** — Worktree folders now have readable names ### Improvements & Fixes - **Window-Scoped Sidebars** — Sub-chat and details sidebars are now per-window - **Image Drops** — Handle image drops as attachments, not file mentions - **Plan Refetch** — Fixed plan refetch trigger with subChatId
## What's New ### Features - **Kanban Board View** — New Kanban board view for managing workspaces - **Voice Input** — Voice dictation with OpenAI Whisper API - **Extensible Mention Providers** — Add custom mention providers for @ mentions - **Custom Hotkeys in Context Menus** — Your keyboard shortcuts now show in context menus ### Improvements & Fixes - **Kanban UI** — Smaller, centered columns for better layout - **Plan Indicator** — Removed PlanIcon from plan update status indicator - **Kanban Settings** — Hide Kanban hotkey in settings when feature is disabled
…v#93) When typing a command prefix, suggestions now appear sorted by name length (shortest first). This makes the closest match appear first. Example: typing "ape" now shows "/apex" before "/apex-analyze". Co-authored-by: Claude Opus 4.5 <[email protected]>
…1st-dev#102) Co-authored-by: Jeremy Holstein <[email protected]>
- Add right-click context menu for terminal with copy/paste support - If text is selected: copies to clipboard and shows toast notification - If no selection: pastes from clipboard - Fix Ctrl+V paste by intercepting the key to prevent xterm showing ^v and letting Electron's menu paste role handle it via paste event - Works on both Windows and macOS Co-authored-by: Claude <[email protected]>
…t-dev#100) Prevent SQLite migration crash on startup. `0005_marvelous_master_chief.sql` may run `ALTER TABLE sub_chats DROP COLUMN ...` on DBs where these columns never existed, causing `SQLITE_ERROR: no such column` and aborting migrations. Remove the unsafe DROP COLUMN statements (keep index creation). Related: 15ee551 (PR 21st-dev#87) - https://github.com/paul-bouzian/1code/blob/15ee55107f3eefbf012fb9754484f987b9fbf399/drizzle/0005_marvelous_master_chief.sql#L1-L4 - https://github.com/paul-bouzian/1code/blob/15ee55107f3eefbf012fb9754484f987b9fbf399/drizzle/meta/_journal.json#L40-L46
…1st-dev#80) * feat: add platform provider abstraction for cross-platform support Introduce a platform provider pattern to centralize all platform-specific logic (Windows, macOS, Linux) in one place. This fixes Windows shell command execution issues and improves maintainability. Changes: - Add platform provider interface and implementations for Windows, macOS, Linux - Refactor cli.ts to use platform provider for CLI installation - Refactor terminal/env.ts to use platform provider for shell detection - Refactor claude/env.ts to use platform provider for environment building - Refactor claude-token.ts to use platform provider for PATH extension - Fix path separator issues (use path.basename instead of split('/')) The platform provider handles: - Shell configuration and detection - PATH building with common tool locations - Environment variable setup - CLI installation/uninstallation - Locale detection Co-Authored-By: Claude <[email protected]> * fix: address PR review feedback Based on PR 21st-dev#80 review by @serafimcloud: 1. Windows PATH limitation (Critical): - Remove `setx PATH` which has 1024 char limit and can truncate PATH - CLI install dir is already in buildExtendedPath() for app usage - Return pathHint for users who want terminal access 2. Variable shadowing (Critical): - Rename `path` to `filePath` in chats.ts to avoid shadowing the imported `path` module 3. Electron coupling (Medium): - Remove unused `app` import from windows.ts - Remove unused `exec`, `promisify`, `lstatSync` imports 4. execCommand consistency (Low): - Add documentation explaining execCommand is for simple commands - Complex shell commands (osascript, pipes) may use exec directly Co-Authored-By: Claude <[email protected]> * fix(windows): install CLI to ~/.local/bin instead of %LOCALAPPDATA% - Install to ~/.local/bin which is already in buildExtendedPath() - Avoids needing to modify system PATH or prompt user - App can find CLI automatically via extended PATH - Users with ~/.local/bin in their PATH can use it from terminal too Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]>
## What's New ### Features - **Multi-Account Support** — Switch between multiple Anthropic accounts - **Remote Sandbox Chats** — Full support for remote sandbox chats - **Default Agent Mode** — Set default agent mode preference with per-chat mode isolation — thanks @serafimcloud! (21st-dev#102) - **Batch Discard** — Multi-select files for batch discard in changes view - **Terminal Copy/Paste** — Improved terminal copy/paste support on Windows — thanks @ChrisPei! (21st-dev#91) ### Improvements & Fixes - **Command Autocomplete** — Sort by name length for better UX — thanks @paul-bouzian! (21st-dev#93) - **SQLite Migration Fix** — Prevent crash on sub_chats drop column — thanks @a3my! (21st-dev#100) - **Cross-Platform Support** — Add platform provider abstraction — thanks @ChrisPei! (21st-dev#80) - **Theme Selector** — Add scroll and max-height to dropdown - **Kanban View** — Various fixes and improvements
## What's New ### Improvements & Fixes - **Chat Stability** — Improved chat remounting and migration idempotency - **Selected Text Indicator** — Show "Using selected text" bubble for pasted text attachments - **UI Polish** — Updated spinner icons and selectors to match desktop style
## What's New ### Improvements & Fixes - **MCP Cache Fix** — Fixed MCP caching issues - **Tool UI Polish** — Improved expand button spacing in bash/edit tools - **Onboarding Cleanup** — Removed welcome dialog and streamlined sidebar
## What's New ### Bug Fixes - **Startup Crash Fix** — Fixed "Cannot find module async-mutex" error that prevented app from launching
Add the ability to configure commands that run when a workspace is archived, mirroring the existing setup script functionality. Changes: - Add archive-worktree, archive-worktree-unix, archive-worktree-windows config keys - Add getArchiveCommands() and executeWorktreeArchive() functions - Integrate archive script execution in chats.archive mutation - Add Archive Commands section to project worktree settings UI - Update header to "Worktree Scripts" to reflect both setup and archive The archive script runs whenever a workspace with a worktree is archived, before the worktree is deleted (if deletion is requested). This allows users to run cleanup tasks like git fetch --prune, branch deletion, etc. Co-Authored-By: Claude Opus 4.5 <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Add the ability to configure commands that run when a workspace is archived, mirroring the existing setup script functionality.
getArchiveCommands()andexecuteWorktreeArchive()functionsHow it works
The archive script runs whenever a workspace with a worktree is archived, before the worktree is deleted (if deletion is requested). This allows users to run cleanup tasks like:
git fetch --prune- clean up remote tracking branchesgit branch -d feature-branch- delete local branchesConfiguration
Commands are stored in
.1code/worktree.jsonalongside setup commands:{ "setup-worktree": ["bun install"], "archive-worktree": ["git fetch --prune"] }Test plan
🤖 Generated with Claude Code